home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / ctimer / ctimer2 / ctimer2.s next >
Encoding:
Text File  |  1995-11-05  |  6.3 KB  |  305 lines

  1. ;  Record:   $1A             program uses a linked list of these
  2. ;            word  name
  3. ;            int   visits    2
  4. ;            int   hi1      $6
  5. ;            int   lo1      $A   
  6. ;            int   elo      $E
  7. ;            int   ehi      $12
  8. ;            APTR  *next    $16
  9.  
  10.         OPT ALINK
  11.  
  12.     XDEF   _Ctime,_Cend,_Creport
  13.     XREF   _printf,_stdout
  14.  
  15. _Cinit
  16.      LEA     dosname,A1
  17.      MOVE.L  4,A6
  18.      JSR     -408(A6)
  19.      MOVE.L  d0,DOSBase
  20.      BNE.B   ffp
  21.      BSR.W   clear
  22.      MOVE.L  #1,clobber 
  23.      BRA.W   ret
  24. ffp
  25.      LEA     mathname,A1
  26.      JSR     -408(A6)
  27.      MOVE.L  D0,MathieeeSingBasBase
  28.      BNE.B   tio
  29.      BSR.W   clear
  30.      MOVE.L  #1,clobber 
  31.      BRA.W   ret
  32. tio
  33.      MOVE.L  #$28,D0
  34.      MOVE.L  #$10001,D1
  35.      JSR     -198(A6)
  36.      MOVE.L  D0,timerio
  37.      BNE.B   clock
  38.      BSR.W   clear
  39.      MOVE.L  #1,clobber 
  40.      BRA.W   ret
  41. clock
  42.      MOVE.L  #$1A,D0
  43.      MOVE.L  #$10001,D1
  44.      JSR     -198(A6)
  45.      MOVE.L  D0,first         allocate memory for first record
  46.      BNE.B   device
  47.      BSR.W   clear
  48.      MOVE.L  #1,clobber 
  49.      BRA.W   ret
  50. device
  51.      LEA     timername,A0
  52.      MOVEQ.L #2,D0
  53.      MOVE.L  timerio,A1
  54.      MOVEQ.L #0,D1
  55.      JSR     -444(A6)         open Eclock
  56.      TST.L   D0
  57.      BEQ.B   tbase
  58.      BSR.W   clear
  59.      MOVE.L  #1,clobber 
  60.      BRA.B   ret
  61. tbase
  62.      MOVE.L  timerio,A0
  63.      MOVE.L  $14(A0),TimerBase
  64.  
  65.      TST.L   _stdout
  66.      BEQ.B   nooutput
  67.      MOVE.L  _stdout,outputfile
  68.      BRA.B   ret
  69. nooutput
  70.      MOVE.L  DOSBase,A6
  71.      JSR     -60(A6)
  72.      MOVE.L  D0,outputfile
  73.      BNE.B   ret
  74.      BSR.W   clear
  75.      MOVE.L  #1,clobber
  76. ret
  77.      RTS
  78.  
  79.  
  80. _Ctime   
  81.        MOVEM.L   A2/A6,-(A7)
  82.        TST.L     primo
  83.        BNE.B     next
  84.        BSR.W     _Cinit
  85.        MOVE.L    #1,primo 
  86. next
  87.        TST.L     clobber
  88.        BNE.W     ret2 
  89.        MOVE.L    first,A2
  90. loop
  91.        MOVE.W    (A2),D0
  92.        CMP.W     $E(A7),D0
  93.        BEQ.B     found
  94.        TST.L     $16(A2)
  95.        BEQ.B     new_record
  96.        MOVE.L    $16(A2),A2
  97.        BRA.B     loop
  98.  
  99. new_record 
  100.        MOVE.L    #$1A,D0
  101.        MOVE.L    #$10001,D1
  102.        MOVE.L    4,A6
  103.        JSR       -198(A6)
  104.        MOVE.L    D0,$16(A2)
  105.        BNE.B     OK1
  106.        BSR.W     clear
  107.        MOVE.B    #1,clobber
  108.        BRA.B     ret2
  109. OK1
  110.        MOVE.L    D0,A2
  111.        MOVE.W    $E(A7),(A2)
  112. found
  113.        ADD.L     #1,2(A2)       visits
  114.        LEA       6(A2),A0
  115.        MOVE.L    TimerBase,A6
  116.        JSR       -60(A6)        read E-Time
  117. ret2
  118.        MOVEM.L   (A7)+,A2/A6
  119.        RTS
  120.        
  121. _Cend
  122.        MOVEM.L   a6,-(A7)
  123.        TST.L     clobber
  124.        BNE.W     quit
  125.        LEA       temp,A0
  126.        MOVE.L    TimerBase,A6
  127.        JSR       -60(A6)        read E-time
  128.        MOVE.L    D0,freq        used for PAL/NTSC correction
  129.        MOVE.W    $A(A7),D1
  130.        MOVE.L    first,A1
  131. loop2
  132.        MOVE.W    (A1),D0
  133.        CMP.W     D1,D0
  134.        BEQ.B     found2
  135.        TST.L     $16(A1)
  136.        BEQ.B     quit
  137.        MOVE.L    $16(A1),A1 
  138.        BRA.B     loop2
  139. found2
  140.        MOVE.L    $A(A1),D0
  141.        MOVE.L    4(A0),D1
  142.        SUB.L     D0,D1
  143.        ADD.L     D1,$E(A1)
  144. quit
  145.        MOVEM.L   (A7)+,a6
  146.        RTS
  147.        
  148. _Creport
  149.     LINK    A5,#-$18
  150.     MOVEM.L    A1-A6,-(A7)
  151.         TST.L   clobber
  152.         BNE.W   ret3
  153.         MOVE.L  first,A4
  154. loop3
  155.           CMP.L    #0,A4
  156.     BEQ.W    end             
  157.         MOVE.L  #1000000,D0
  158.         MOVE.L  MathieeeSingBasBase,A6
  159.         JSR     -$24(A6)         SPflt
  160.         MOVE.L  D0,D1
  161.         MOVE.L  freq,D0
  162.         JSR     -$24(A6)         SPflt
  163.         JSR     -$54(A6)         Div
  164.         MOVE.L  D0,D1
  165.  
  166.         MOVE.L  $E(A4),D0
  167.         JSR     -$24(A6) 
  168.         JSR     -$54(A6) 
  169.         JSR     -$1E(A6)         fix
  170.  
  171.         MOVE.L  #$3E8,D2
  172.         BSR.W   div
  173.         MOVE.W  D1,D3 
  174.         EXT.L   D3               Micros
  175.         BSR.W   div
  176.         MOVE.W  D1,D4
  177.         EXT.L   D4               Msecs
  178.         MOVE.L  D0,D5            secs  
  179.  
  180.         LEA     format,A0
  181.         LEA     datastore,A1
  182.         MOVE.W  0(A4),D0
  183.         EXT.L   D0
  184.         MOVE.L  D0,(A1)
  185.         MOVE.L  2(A4),4(A1)
  186.         MOVE.L  D5,8(A1)
  187.         MOVE.L  D4,$C(A1)
  188.         MOVE.L  D3,$10(A1)
  189.         LEA     code,A2
  190.         LEA     output,A3
  191.         MOVE.L  4,A6
  192.         JSR     -522(A6)         DoRawFmt     
  193.    
  194.         MOVE.L  A3,A2
  195. next2
  196.         TST.B   (A2)+
  197.         BNE.B   next2
  198.         SUBQ.L  #1,A2
  199.         SUBA.L  A3,A2
  200.  
  201.         MOVE.L  outputfile,D1
  202.         MOVE.L  A3,D2
  203.         MOVE.L  A2,D3
  204.         MOVE.L  DOSBase,A6
  205.         JSR     -48(A6)          write
  206.         MOVEA.L A4,A1
  207.         MOVEA.L    $16(A4),A4       next record
  208.  
  209.     BRA    loop3
  210. end
  211.         BSR.W   clear
  212. ret3
  213.     MOVEM.L    (A7)+,A1-A6
  214.     UNLK    A5
  215.     RTS
  216.  
  217. clear
  218.     LINK    A5,#-$18
  219.     MOVEM.L    A1-A6,-(A7)
  220.         TST.L   first
  221.         BEQ.B   math
  222.         MOVE.L  first,A1
  223. loop4
  224.         MOVE.L  $16(A1),A2
  225.         MOVE.L  #$1A,D0
  226.         MOVE.L  4,A6
  227.         JSR     -210(A6)
  228.         MOVEA.L A2,A1
  229.         CMP.L   #0,A1
  230.         BNE.B   loop4
  231.  
  232.         TST.L   timerio
  233.         BEQ.B   math
  234.         MOVE.L  timerio,A1
  235.         MOVE.L  4,A6
  236.         JSR     -450(A6)
  237.  
  238.         MOVE.L  timerio,A1
  239.         MOVE.L  #$28,D0
  240.         JSR     -210(A6)
  241. math
  242.         TST.L   MathieeeSingBasBase
  243.         BEQ.B   realclear
  244.         MOVE.L  MathieeeSingBasBase,A1
  245.         JSR     -414(A6)
  246. realclear  
  247.     MOVEM.L    (A7)+,A1-A6
  248.     UNLK    A5
  249.     RTS
  250.  
  251. code
  252.         MOVE.B  D0,(A3)+
  253.         RTS
  254.  
  255. div           ;time in d0  divisor in D2
  256.         TST.L   D0
  257.         BPL     div2
  258.         NEG     D0
  259.         BSR.B   div2
  260.         NEG     D0
  261.         NEG     D1
  262.         RTS
  263. div2
  264.         SWAP    D0
  265.         MOVEQ.L #0,D1
  266.         MOVE.W  D0,D1
  267.         BEQ.W   cont
  268.         DIVU    D2,D1
  269.         MOVE.W  D1,D0
  270. cont
  271.         SWAP    D0
  272.         MOVE.W  D0,D1
  273.         DIVU    D2,D1
  274.         MOVE.W  D1,D0     result(LONG) in D1
  275.         SWAP    D1        rdr
  276.         RTS 
  277.  
  278. datastore dc.l  0,0,0,0,0,0
  279. output    dc.l  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  280.               
  281. format    dc.b  'Function %ld: Visits %ld  secs %ld  msecs %ld  micros %ld',10,0
  282.        EVEN
  283.  
  284. dosname   dc.b 'dos.library',0
  285.   EVEN 
  286. mathname  dc.b 'mathieeesingbas.library',0
  287.   EVEN 
  288. timername dc.b 'timer.device',0
  289.   EVEN
  290. server    dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  291. count     dc.l 0
  292. DOSBase   dc.l 0
  293. MathieeeSingBasBase  dc.l 0
  294. TimerBase dc.l 0
  295. primo     dc.l 0
  296. first     dc.l 0 
  297. temp      dc.l 0,0
  298. timerio   dc.l 0
  299. outputfile dc.l 0 
  300. freq      dc.l 0
  301. clobber   dc.l 0
  302.  
  303.  
  304.  
  305.